<!DOCTYPE html>

<html>
<head>
  <title>event.coffee</title>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
  <link rel="stylesheet" media="all" href="docco.css" />
</head>
<body>
  <div id="container">
    <div id="background"></div>
    
      <ul id="jump_to">
        <li>
          <a class="large" href="javascript:void(0);">Jump To &hellip;</a>
          <a class="small" href="javascript:void(0);">+</a>
          <div id="jump_wrapper">
          <div id="jump_page">
            
              
              <a class="source" href="analyze.html">
                analyze.coffee
              </a>
            
              
              <a class="source" href="autoload.html">
                autoload.coffee
              </a>
            
              
              <a class="source" href="blender.html">
                blender.coffee
              </a>
            
              
              <a class="source" href="calculate.html">
                calculate.coffee
              </a>
            
              
              <a class="source" href="caman.html">
                caman.coffee
              </a>
            
              
              <a class="source" href="convert.html">
                convert.coffee
              </a>
            
              
              <a class="source" href="event.html">
                event.coffee
              </a>
            
              
              <a class="source" href="filter.html">
                filter.coffee
              </a>
            
              
              <a class="source" href="io.html">
                io.coffee
              </a>
            
              
              <a class="source" href="layer.html">
                layer.coffee
              </a>
            
              
              <a class="source" href="logger.html">
                logger.coffee
              </a>
            
              
              <a class="source" href="module.html">
                module.coffee
              </a>
            
              
              <a class="source" href="pixel.html">
                pixel.coffee
              </a>
            
              
              <a class="source" href="plugin.html">
                plugin.coffee
              </a>
            
              
              <a class="source" href="renderer.html">
                renderer.coffee
              </a>
            
              
              <a class="source" href="store.html">
                store.coffee
              </a>
            
              
              <a class="source" href="util.html">
                util.coffee
              </a>
            
              
              <a class="source" href="blenders.html">
                blenders.coffee
              </a>
            
              
              <a class="source" href="filters.html">
                filters.coffee
              </a>
            
              
              <a class="source" href="size.html">
                size.coffee
              </a>
            
              
              <a class="source" href="blur.html">
                blur.coffee
              </a>
            
              
              <a class="source" href="camera.html">
                camera.coffee
              </a>
            
              
              <a class="source" href="compoundBlur.html">
                compoundBlur.coffee
              </a>
            
              
              <a class="source" href="edges.html">
                edges.coffee
              </a>
            
              
              <a class="source" href="posterize.html">
                posterize.coffee
              </a>
            
              
              <a class="source" href="presets.html">
                presets.coffee
              </a>
            
              
              <a class="source" href="rotate.html">
                rotate.coffee
              </a>
            
              
              <a class="source" href="stackBlur.html">
                stackBlur.coffee
              </a>
            
              
              <a class="source" href="threshold.html">
                threshold.coffee
              </a>
            
          </div>
        </li>
      </ul>
    
    <ul class="sections">
        
          <li id="title">
              <div class="annotation">
                  <h1>event.coffee</h1>
              </div>
          </li>
        
        
        
        <li id="section-1">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-1">&#182;</a>
              </div>
              <p>Event system that can be used to register callbacks that get fired
during certain times in the render process.</p>

            </div>
            
            <div class="content"><div class='highlight'><pre><span class="class"><span class="keyword">class</span> <span class="title">Caman</span>.<span class="title">Event</span></span>
  <span class="property">@events</span> = {}</pre></div></div>
            
        </li>
        
        
        <li id="section-2">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-2">&#182;</a>
              </div>
              <p>All of the supported event types</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>  <span class="property">@types</span> = [
    <span class="string">"processStart"</span>
    <span class="string">"processComplete"</span>
    <span class="string">"renderStart"</span>
    <span class="string">"renderFinished"</span>
    <span class="string">"blockStarted"</span>
    <span class="string">"blockFinished"</span>
  ]</pre></div></div>
            
        </li>
        
        
        <li id="section-3">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-3">&#182;</a>
              </div>
              <p>Trigger an event.
@param [Caman] target Instance of Caman emitting the event.
@param [String] type The event type.
@param [Object] data Extra data to send with the event.</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>  <span class="property">@trigger</span>: (target, type, data = <span class="literal">null</span>) -&gt;
    <span class="keyword">if</span> <span class="property">@events</span>[type] <span class="keyword">and</span> <span class="property">@events</span>[type].length
      <span class="keyword">for</span> event <span class="keyword">in</span> <span class="property">@events</span>[type]
        <span class="keyword">if</span> event.target <span class="keyword">is</span> <span class="literal">null</span> <span class="keyword">or</span> target.id <span class="keyword">is</span> event.target.id
          event.fn.call target, data</pre></div></div>
            
        </li>
        
        
        <li id="section-4">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-4">&#182;</a>
              </div>
              <p>Listen for an event. Optionally bind the listen to a single instance
or all instances.</p>
<p>@overload listen(target, type, fn)
  Listen for events emitted from a particular Caman instance.
  @param [Caman] target The instance to listen to.
  @param [String] type The type of event to listen for.
  @param [Function] fn The function to call when the event occurs.</p>
<p>@overload listen(type, fn)
  Listen for an event from all Caman instances.
  @param [String] type The type of event to listen for.
  @param [Function] fn The function to call when the event occurs.</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>  <span class="property">@listen</span>: (target, type, fn) -&gt;</pre></div></div>
            
        </li>
        
        
        <li id="section-5">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-5">&#182;</a>
              </div>
              <p>Adjust arguments if target is omitted</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    <span class="keyword">if</span> <span class="keyword">typeof</span> target <span class="keyword">is</span> <span class="string">"string"</span>
      _type = target
      _fn = type

      target = <span class="literal">null</span>
      type = _type
      fn = _fn</pre></div></div>
            
        </li>
        
        
        <li id="section-6">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-6">&#182;</a>
              </div>
              <p>Validation</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    <span class="keyword">return</span> <span class="literal">false</span> <span class="keyword">if</span> type <span class="keyword">not</span> <span class="keyword">in</span> <span class="property">@types</span>

    <span class="property">@events</span>[type] = [] <span class="keyword">if</span> <span class="keyword">not</span> <span class="property">@events</span>[type]
    <span class="property">@events</span>[type].push target: target, fn: fn

    <span class="keyword">return</span> <span class="literal">true</span>

Event = Caman.Event</pre></div></div>
            
        </li>
        
    </ul>
  </div>
</body>
</html>
